package top.xia17.plugins.fast.common.database.jpa.query;

import org.springframework.data.jpa.domain.Specification;

import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;

/**
 * 查询条件
 * @author xia17
 * @date 2020/7/22 16:26
 */
public interface BaseQuery<T> extends Specification<T> {

    /**
     * 默认的生成查询条件方法
     * @param root 实体跟
     * @param criteriaQuery 高级查询构造工厂类
     * @param criteriaBuilder 简单查询构造工厂类
     * @return Predicate 查询条件
     */
    @Override
    default Predicate toPredicate(Root<T> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder){
        this.check();
        return QueryHelp.getPredicate(root,criteriaQuery,criteriaBuilder,this);
    }


    /**
     * 检查参数 ， 每次生成查询时都会先调用该方法。
     */
    default void check(){

    }

}
